import axios from 'axios'
import store from '@/store'
import router from '@/router'
import JSONBig from 'json-bigint'
const instance = axios.create({
  baseURL: 'http://toutiao-app.itheima.net',
  transformResponse: [function (data) {
    try {
      // 大数处理
      return JSONBig.parse(data)
    } catch (err) {
      return data
    }
  }]
})
// 请求拦截器
instance.interceptors.request.use(config => {
  // 在发送请求之前做些什么
  // 获取vuex中的token
  const token = store.state.tokenInfo.token
  // 设置请求头
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, error => {
// 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
instance.interceptors.response.use((response) => {
  // 对响应数据做点什么
  return response
}, (error) => {
  // 对响应错误做点什么
  // console.log(error.response.status)
  if (error.response.status === 401) {
    // console.log(router.currentRoute.fullPath) // 要去哪里
    // 删除token
    store.commit('removeToken')
    router.push({
      path: '/login',
      query: {
        backto: router.currentRoute.fullPath // 要去哪里
      }
    })
  }
  return Promise.reject(error)
})

// 无感知刷新token
// instance.interceptors.response.use((response) => {
//   // 对响应数据做点什么
//   return response
// }, async (error) => {
//   // 如果请求401错误
//   if (error.response && error.response.status === 401) {
//     // 请求新token成功
//     try {
//       // refreshToken 拿到另一个token
//       const refreshToken = store.state.tokenInfo.refresh_token
//       // 利用refreshToken里的token  请求新的token
//       const res = await axios({
//         method: 'PUT',
//         url: 'http://toutiao-app.itheima.net/v1_0/authorizations',
//         headers: {
//           Authorization: `Bearer ${refreshToken}`
//         }
//       })
//       // 拿到新的token
//       const newToken = res.data.data.token
//       // 更新本地的token
//       store.commit('setToken', {
//         token: newToken,
//         refresh_token: refreshToken
//       })
//       // 重新使用我们之间创建的axios实例，用本次错误请求中的配置项,再发一次
//       return instance(error.config)
//     } catch (e) { // 请求新token失败
//       // 路由跳转，进入登陆页
//       router.push({
//         path: '/login',
//         query: {
//           // currentRoute：表示当前路由
//           backto: router.currentRoute.fullPath
//         }
//       })
//     }
//   }
//   return Promise.reject(error)
// })

export default instance
